import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

/**
 *	程序的入口
 */
public class Main {

	public static String path = "";		// 数据路径
	public static float alpha = 0.05f;			// 显著度
	public static ArrayList<Float> data = new ArrayList<Float>();	// 测量数据
	public static int format = 2;			// 数据小数点后的位数
	/**
	 *	简易的分解输入参数
	 */
	public static void parseArgs(String[] args){
		switch(args.length){
			case 0:{
				break;
			}
			case 1:{
				path = args[0];
				break;
			}
			case 2:{
				path = args[0];
				alpha = Float.parseFloat(args[1]);
				break;
			}
			default:{
				printUsage();
			}
		}
	}
	
	/**
	 *	简易的使用帮助
	 */
	public static void printUsage(){
		String usage = "java Main [<path> <alpha>]"
						+"例如：	 java Main"
						+"或者	 java Main data.txt"
						+"或者	 java Main data.txt 0.01";
		System.out.println(usage);
		System.exit(1);
	}
	
	/**
	 *	从文件中读取测量数据
	 */
	private static void getData(){
		File file = new File(path);	
		if(file.exists()){  
			if(file.isFile()){  
				try{  
					BufferedReader input = new BufferedReader (new FileReader(file)); 
					String tmp = null; 
					while((tmp = input.readLine()) != null){
						format = tmp.length() - tmp.indexOf(".") -1;
						 data.add(Float.valueOf(tmp)); 
					 }          		                   
				}  
				catch(IOException ioException){  
					System.err.println("文件读取错误!");  
				}  
			}  
			System.out.println("从文件"+path+"中成功读取以下数据:");
		}  
		else{  
			System.out.println("以以下默认数据运行:");  
			data.add(20.42f);		data.add(20.43f);		data.add(20.40f);		
			data.add(20.43f);		data.add(20.42f);		data.add(20.43f);
			data.add(20.39f);		data.add(20.30f);		data.add(20.40f);
			data.add(20.43f);		data.add(20.42f);		data.add(20.41f);
			data.add(20.39f);		data.add(20.39f);		data.add(20.40f);
		}
		for(int i=0;i<data.size();i++){
			System.out.printf("%."+format+"f\t",data.get(i));
			if(i % 6 == 5){
				System.out.println();
			}
		}
		System.out.println("\n");
		System.out.println("取显著度:"+alpha+"\n");
	}
	
	/**
	 *	主函数
	 */
	public static void main(String[] args) {
		parseArgs(args);
		getData();
		// 使用莱以特准则
		Method m1 = new LaiYiTe(data, format);
		m1.check();
		// 使用罗曼诺夫斯基准则
		Method m2 = new LuoManFuSiJi(data, alpha, format);
		m2.check();
		// 使用格罗布斯准则
		Method m3 = new GeLuoBuSi(data, alpha, format);
		m3.check();
		// 使用狄克松准则
		Method m4 = new DiKeSong(data, alpha, format);
		m4.check();
	}
}
